import { ApiProperty, ApiPropertyOptional } from '@midwayjs/swagger'
import { Rule, RuleType } from '@midwayjs/validate'

import { PageDTO } from '@/dto'

/**
 * 查找角色分页传输对象
 */
export class FindRolePageDTO extends PageDTO implements IFindRolePageDTO {
  @ApiPropertyOptional({ description: '角色名称' })
  @Rule(RuleType.string().empty(''))
  roleName: string

  @ApiPropertyOptional({ description: '权限字符' })
  @Rule(RuleType.string().empty(''))
  roleKey: string

  @ApiPropertyOptional({ description: '状态' })
  @Rule(RuleType.string().empty(''))
  status: string

  @ApiPropertyOptional({ description: '开始时间' })
  @Rule(RuleType.date().empty(''))
  beginDate: Date

  @ApiPropertyOptional({ description: '结束时间' })
  @Rule(RuleType.date().empty(''))
  endDate: Date
}

/**
 * 查找授权用户分页储传输对象
 */
export class FindAuthUserPageDTO
  extends PageDTO
  implements IFindAuthUserPageDTO
{
  @ApiPropertyOptional({ description: '用户账号' })
  @Rule(RuleType.string().empty(''))
  userName: string

  @ApiPropertyOptional({ description: '手机号码' })
  @Rule(RuleType.string().empty(''))
  phone: string
}

/**
 * 添加角色传输对象
 */
export class CreateRoleDTO implements ICreateRoleDTO {
  @ApiProperty({ description: '角色名称' })
  @Rule(RuleType.string().required().error(new Error('角色名称不能为空')))
  roleName: string

  @ApiProperty({ description: '权限字符' })
  @Rule(RuleType.string().required().error(new Error('权限字符不能为空')))
  roleKey: string

  @ApiProperty({ description: '显示顺序' })
  @Rule(RuleType.number().required().error(new Error('角色顺序不能为空')))
  roleSort: number

  @ApiPropertyOptional({ description: '菜单数组' })
  @Rule(RuleType.array().items(RuleType.string()).empty())
  menus: string[]

  @ApiPropertyOptional({ description: '状态' })
  @Rule(RuleType.string().empty(''))
  status: string

  @ApiPropertyOptional({ description: '备注' })
  @Rule(RuleType.string().empty(''))
  remark: string
}

/**
 * 更新角色传输对象
 */
export class UpdateRoleDTO extends CreateRoleDTO {}
